package com.nehc.nettyserver.service;

import com.nehc.nettyserver.common.model.Message;

import java.util.List;

/**
 * 存储服务接口
 * 提供消息和连接记录的持久化存储能力
 * 
 * @author NEHC
 */
public interface StorageService {

    /**
     * 保存消息
     * 
     * @param message 消息对象
     * @return 是否保存成功
     */
    boolean saveMessage(Message message);
    
    /**
     * 获取消息
     * 
     * @param messageId 消息ID
     * @return 消息对象，如果不存在则返回null
     */
    Message getMessage(String messageId);
    
    /**
     * 获取用户消息列表
     * 
     * @param userId 用户ID
     * @param limit 最大返回数量
     * @return 消息列表
     */
    List<Message> getUserMessages(String userId, int limit);
    
    /**
     * 获取用户消息列表（带分页）
     * 
     * @param userId 用户ID
     * @param offset 起始位置
     * @param limit 最大返回数量
     * @return 消息列表
     */
    List<Message> getUserMessages(String userId, int offset, int limit);
    
    /**
     * 获取客户端消息列表
     * 
     * @param clientId 客户端ID
     * @param offset 起始位置
     * @param limit 最大返回数量
     * @return 消息列表
     */
    List<Message> getClientMessages(String clientId, int offset, int limit);
    
    /**
     * 保存连接记录
     * 
     * @param connectionId 连接ID
     * @param data 连接数据
     * @return 是否保存成功
     */
    boolean saveConnection(String connectionId, Object data);
    
    /**
     * 更新连接记录
     * 
     * @param connectionId 连接ID
     * @param data 连接数据
     * @return 是否更新成功
     */
    boolean updateConnection(String connectionId, Object data);
    
    /**
     * 获取连接记录
     * 
     * @param connectionId 连接ID
     * @return 连接数据
     */
    Object getConnection(String connectionId);
    
    /**
     * 获取时间范围内的消息计数
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 消息计数
     */
    int getMessageCount(long startTime, long endTime);
    
    /**
     * 获取时间范围内按类型分组的消息计数
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 按类型分组的消息计数
     */
    List<Object[]> getMessageCountByType(long startTime, long endTime);
    
    /**
     * 获取时间范围内按时间段分组的消息计数
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 按时间段分组的消息计数
     */
    List<Object[]> getMessageCountByHour(long startTime, long endTime);
} 